Pizzeria PisciBurger

Bienvenido a mi proyecto web de una pizzería.

Sobre el Proyecto

Este proyecto es una plataforma diseñada al 100% en la nube siguiendo un modelo de tres capas de pedidos en línea para la pizzería PisciBurger. Su propósito es facilitar la experiencia de los clientes permitiéndoles realizar pedidos cómodamente desde sus dispositivos, sin necesidad de llamar por teléfono. La interfaz es intuitiva, con una navegación sencilla por categorías de productos, desde Pizzas hasta Postres, permitiendo a los usuarios seleccionar productos, ver detalles, y finalizar la compra.

Logo e Identidad Visual

El logo de PisciBurger es el elemento visual central en la plataforma, creando un reconocimiento instantáneo de la marca. Se ha diseñado la identidad visual para que esté alineada con la imagen de una pizzería moderna, utilizando colores cálidos y atractivos que reflejan el ambiente acogedor y la calidad de los productos ofrecidos.

Tecnologías Utilizadas

Json Json
Python Python
Linux Linux
Json Html
Python CSS 5
Linux JAVASCRIPT
Json SQL
Python AWS CLOUDFRONT
Linux AWS S3
Json AWS ROUTE 53
Python AWS LAMBDA
Linux AWS RDS

Documentación Técnica

Componentes Principales

  • Frontend: La interfaz de usuario está desarrollada en HTML, CSS y JavaScript, y se ha implementado un sistema de carruseles para la navegación de productos, junto con botones de acción intuitivos que facilitan la experiencia de usuario. Todo el frontend está alojado en Amazon S3, lo que garantiza una entrega rápida y segura de los contenidos estáticos, asegurando alta disponibilidad y escalabilidad en la nube.
  • Backend: Utiliza Funciones de AWS Lambda para gestionar los pedidos y la autenticación de usuarios mediante solicitudes HTTP. Estas funciones también se encargan de acceder a los datos almacenados en la base de datos, permitiendo obtener y actualizar la información de manera eficiente y sin servidores. Gracias a AWS Lambda, el backend es altamente escalable y optimizado para manejar múltiples solicitudes de los usuarios en tiempo real.
  • Modales: Modales de inicio de sesión y registro que capturan datos del usuario y los envían de manera segura a AWS.
  • Diagrama de Arquitectura

    Este proyecto es una plataforma 100% en la nube, utilizando tecnología de AWS para garantizar alta disponibilidad, escalabilidad, eficiencia y seguridad en el procesamiento de datos. La arquitectura conecta el frontend, alojado en Amazon S3 y distribuido globalmente mediante Amazon CloudFront, lo que asegura una carga rápida de los contenidos estáticos en la zona cercana a la pizzería, mejorando la experiencia del usuario local. El enrutamiento DNS es gestionado por Amazon Route 53, que dirige el tráfico de forma confiable hacia los recursos de la plataforma.

    Las Funciones de AWS Lambda se encargan del procesamiento de pedidos, la autenticación de usuarios y la interacción con la base de datos, la cual se almacena en Amazon RDS. Amazon RDS proporciona una base de datos relacional segura y escalable, que permite a las funciones Lambda acceder y actualizar la información de manera eficiente. Este flujo de arquitectura permite una comunicación optimizada entre la interfaz de usuario y el backend, asegurando que todos los datos y archivos se gestionen de forma segura y sin servidores dedicados.

    Diagrama de Arquitectura Cloud de la Plataforma

    Esquema de Base de Datos

    La base de datos está estructurada en Amazon RDS utilizando MariaDB como motor de base de datos, proporcionando una solución escalable, confiable y segura para almacenar los datos de la plataforma. Se han implementado medidas de seguridad avanzadas para proteger tanto la base de datos como los datos sensibles de los usuarios.

  • Usuarios: Almacena datos de los usuarios registrados, como ID de usuario, nombre, correo electrónico y datos de autenticación. Las contraseñas están encriptadas para garantizar su seguridad y prevenir accesos no autorizados.
  • Pedidos: Registra los pedidos realizados, incluyendo detalles como el ID del pedido, ID del usuario, productos solicitados, cantidades, precios y el estado del pedido.
  • Productos: Incluye la información de cada producto disponible, como ID de producto, nombre, descripción, categoría (por ejemplo, Pizzas, Bebidas, etc.), y precio.
  • Historial de Pedidos: Registra el historial de pedidos de cada usuario para permitir un acceso rápido a pedidos previos, facilitando futuras órdenes.
  • Además, Amazon RDS ofrece una capa adicional de seguridad para MariaDB mediante configuraciones avanzadas de acceso y encriptación de datos en reposo. Estos controles garantizan que los datos de usuario y las contraseñas estén protegidos contra accesos no autorizados, asegurando la privacidad y la integridad de la información en todo momento.

    Diagrama de Arquitectura de la Plataforma

    Seguridad y Protección de Datos

    La plataforma utiliza una serie de medidas avanzadas para garantizar la seguridad de los datos de los usuarios y proteger la infraestructura.

  • Cifrado de Datos: Todos los datos sensibles, incluyendo las contraseñas, están cifrados en reposo y en tránsito. Amazon RDS ofrece encriptación de datos en reposo para la base de datos MariaDB, mientras que el tráfico entre el frontend y backend se asegura mediante HTTPS.
  • Controles de Acceso: El acceso a los recursos de AWS está estrictamente controlado mediante políticas de IAM (Identity and Access Management), asegurando que solo las funciones y usuarios autorizados pueden interactuar con la base de datos y los datos de los usuarios.
  • Arquitectura de Tres Capas: El proyecto está estructurado en un entorno de tres capas para maximizar la seguridad:
  • Capa Pública: Solo el bucket de Amazon S3 que almacena el frontend es accesible públicamente, facilitando la carga rápida de contenido estático.
  • Capa de Aplicación: Las Funciones de AWS Lambda operan en una capa segura, gestionando las solicitudes del frontend sin exposición directa a la capa pública.
  • Capa de Datos: La base de datos MariaDB en Amazon RDS se encuentra en una capa privada, inaccesible desde el exterior.
  • Grupos de Seguridad y ACLs: Los grupos de seguridad y listas de control de acceso (ACLs) están configurados para controlar el tráfico entre capas. Solo se permiten conexiones internas necesarias, y los puertos de la base de datos están cerrados al acceso público, permitiendo solo el tráfico desde las funciones de Lambda autorizadas en la capa de aplicación.
  • Monitoreo y Auditoría: La integración con AWS CloudWatch permite monitorear el tráfico y las solicitudes a las Funciones de AWS Lambda, facilitando la detección y respuesta rápida ante posibles amenazas.
  • Backup y Recuperación: Amazon RDS realiza copias de seguridad automáticas para garantizar que la información esté disponible y segura ante cualquier incidencia.
  • Costo de Funcionamiento

    El proyecto está diseñado para ser rentable y escalable, aprovechando los servicios de AWS con un modelo de pago por uso que minimiza los costos operativos.

    Para estimar los costos iniciales, se ha utilizado el AWS Pricing Calculator, y se monitorean los costos actuales con AWS Cost Explorer.

    En el futuro, se implementarán otras herramientas como AWS Budgets, AWS Cost Anomaly Detection, AWS Trusted Advisor y AWS Compute Optimizer para mejorar y optimizar el costo en el funcionamiento continuo de la plataforma.

  • Amazon S3: Utilizado para almacenar y entregar el frontend estático, con costos que dependen del almacenamiento utilizado y el tráfico de salida.
  • AWS Lambda: Permite la ejecución sin servidor de funciones, cobrando solo por el número de solicitudes y el tiempo de ejecución, lo que reduce los costos significativamente.
  • Amazon RDS: La base de datos MariaDB en Amazon RDS incurre en costos basados en el tipo de instancia, el almacenamiento y la transferencia de datos.
  • Amazon CloudFront: Utilizado para distribuir el contenido de manera regional, mejorando la latencia en la zona de la pizzería y manteniendo los costos bajos.
  • Amazon Route 53: Proporciona enrutamiento DNS confiable, con costos basados en el número de consultas.
  • Estimación Mensual: Dependiendo del tráfico y del uso, el costo mensual promedio estimado es de X a Y USD, con capacidad de ajuste según el crecimiento del proyecto.

    Presupuesto

    Servicio Descripción Costo Aproximado (€/mes)
    Amazon S3 Almacenamiento y entrega del frontend estático (asumiendo 10 GB de almacenamiento y 100 GB de tráfico de salida) 5€ - 7€
    AWS Lambda Procesamiento de pedidos, autenticación y acceso a la base de datos (estimado en 500,000 solicitudes con ejecución media de 200 ms) 2€ - 5€
    Amazon RDS (MariaDB) Base de datos para almacenamiento de usuarios y pedidos. Considerando una instancia db.t3.micro y 20 GB de almacenamiento 15€ - 20€
    Amazon CloudFront Distribución de contenido en una región cercana para mejorar la latencia (asumiendo 100 GB de tráfico de salida) 8€ - 10€
    Amazon Route 53 Enrutamiento DNS para el dominio, con aproximadamente 1 millón de consultas DNS al mes 0.50€
    Monitoreo y Seguridad (AWS CloudWatch, AWS IAM) Monitoreo básico y configuración de roles de seguridad (CloudWatch Logs y métricas) 1€ - 3€

    Costo Total Aproximado: Sumando todos los servicios, el costo mensual promedio estimado es de 31.50€ - 45.50€ €/mes.

    Dependiendo del tráfico y del uso, el costo mensual puede ajustarse según el crecimiento del proyecto.

    Notas:

    • Escalabilidad: Los costos pueden ajustarse según el aumento en el volumen de tráfico o pedidos.
      • Posibles Ahorros: Algunas optimizaciones, como la reducción de datos en Amazon S3 o el ajuste de tiempo de ejecución en AWS Lambda, pueden reducir el costo total.
        • Consideraciones de Ubicación: Los precios pueden variar ligeramente según la región de AWS seleccionada en Europa.
        • Interfaz de Escritorio

          Frontend

          Inicio

          Interfaz principal del usuario

          Backend

          Login

          Interfaz de login de usuario

          Registro

          Menu

          Página de eleccion de productos

          Registro

          Pedido Realizado

          Página post pedido

          Interfaz Responsiva

          Captura de Frontend

          Inicio

          Interfaz principal del usuario

          Captura de Backend

          Login

          Interfaz de login de usuario/p>

          Zona de Registro

          Registro

          Página de registro de usuario

          Zona de Registro

          Menu

          Página de eleccion de productos

          Zona de Registro

          Pedido Realizado

          Página post pedido

          Proceso de Desarrollo

          Planificación

          El desarrollo del proyecto se planificó en fases para asegurar un flujo de trabajo organizado y efectivo. Estas fases incluyeron:

        • Diseño de la Interfaz: Definición del diseño de la interfaz de usuario, creando una experiencia intuitiva y atractiva.
        • Desarrollo del Backend: Implementación de las Funciones de AWS Lambda y configuración de la base de datos en Amazon RDS para gestionar pedidos, usuarios y autenticación.
        • Pruebas y Ajustes: Pruebas continuas de cada componente, ajustando y optimizando el rendimiento y la seguridad en base a los resultados obtenidos.
        • Implementación en Producción: Despliegue final en la infraestructura de AWS, utilizando Amazon S3, CloudFront y Route 53 para una distribución eficiente y de baja latencia.
        • Cada fase contó con objetivos específicos y plazos definidos, lo cual me permitió una evolución ordenada del proyecto y la capacidad de hacer ajustes según las necesidades del cliente y los resultados de las pruebas.

          Metodología

          El desarrollo del proyecto siguió una metodología ágil para facilitar la adaptabilidad y la mejora continua en cada fase. Los aspectos clave de esta metodología incluyeron:

        • Ciclos de Desarrollo Iterativos: Se trabajó en sprints cortos, lo cual permitió avanzar en incrementos y realizar ajustes rápidamente en función de las necesidades.
        • Revisión y Feedback Continuo: Al finalizar cada sprint, se realizó una revisión para evaluar el progreso y recoger el feedback necesario, asegurando que cada componente cumpliera con los objetivos del proyecto.
        • Pruebas en Cada Etapa: Las pruebas se realizaron en cada fase, desde el diseño de la interfaz hasta la implementación del backend, permitiendo identificar y corregir problemas temprano.
        • Documentación Constante: Se documentaron todos los avances, las decisiones técnicas y los cambios realizados para garantizar claridad y facilitar futuras actualizaciones o mantenimientos.
        • Esta metodología me permitió realizar mejoras continuas, responder a cambios y optimizar el desarrollo para obtener un producto final que se ajusta a las expectativas del cliente.

          Retos y Soluciones

          Este ha sido mi primer proyecto en el mundo del desarrollo mientras que realiza el curso de AWS Re/Sart, lo que implicó afrontar numerosos desafíos, especialmente al no tener experiencia previa en programación. Sin embargo, cada obstáculo fue una oportunidad para aprender y mejorar, y poco a poco logré superar los problemas, obteniendo un producto funcional y confiable. A continuación, comparto algunos de los principales retos y las soluciones que encontré en el camino:

        • Interfaz Responsiva: Crear una interfaz adaptable tanto a dispositivos móviles como a escritorio fue un reto, especialmente con elementos interactivos como botones y carruseles que debían funcionar en cualquier pantalla.
        • Solución: Después de muchas pruebas, decidí usar CSS Grid y Flexbox para construir un diseño que se ajustara automáticamente al tamaño de la pantalla. Esto permitió que el sitio se viera bien en diferentes dispositivos, mejorando la experiencia del usuario.
        • Optimización de la Latencia Regional: Dado que los usuarios estarían cerca de la ubicación de la pizzería, era importante que el sitio cargara rápidamente en esa región.
        • Solución: Configuré Amazon CloudFront para distribuir el contenido en servidores cercanos, lo cual redujo la latencia considerablemente. Esto hizo que la experiencia del usuario fuera más fluida y rápida para los clientes locales.
        • Gestión Segura de Datos de Usuario: Asegurar los datos de los usuarios, especialmente las contraseñas, fue una prioridad desde el comienzo. Esto era completamente nuevo para mí, y aprender sobre seguridad fue un desafío.
        • Solución: Implementé encriptación para proteger los datos tanto en reposo como en tránsito. Las contraseñas se almacenaron con hashing seguro en Amazon RDS, lo que ayudó a mantener la información de los usuarios protegida.
        • Problemas con CORS en AWS Lambda: Durante la configuración de las Funciones de AWS Lambda, me encontré con problemas de CORS (Cross-Origin Resource Sharing), que bloqueaban la comunicación entre el frontend y el backend. Esto fue frustrante al principio y me llevó bastante tiempo resolverlo.
        • Solución: Tras investigar bastante, aprendí cómo configurar los encabezados de respuesta en Lambda para permitir el acceso desde el frontend, resolviendo finalmente los problemas de CORS y mejorando la comunicación en la aplicación.
        • Escalabilidad del Backend: Con el potencial crecimiento del proyecto, necesitaba que el backend pudiera manejar un mayor número de solicitudes sin que el rendimiento se viera afectado.
        • Solución: Utilicé AWS Lambda para que las funciones de backend se ejecutaran sin servidores fijos, lo cual permitió una escalabilidad automática y ayudó a mantener el rendimiento en picos de demanda.
        • Monitoreo y Detección de Anomalías: Poder detectar rápidamente cualquier problema de rendimiento o seguridad era crucial para que el sistema se mantuviera fiable.
        • Solución: Integré AWS CloudWatch para monitorear tanto las funciones de Lambda como el tráfico de la plataforma. Esto permitió tener alertas en tiempo real y hacer diagnósticos rápidos si surgían problemas, garantizando la estabilidad del sistema.
        • Descripción de Funcionalidades

          Autenticación de Usuarios

          La autenticación de usuarios es un aspecto crucial para asegurar que solo las personas autorizadas puedan acceder a sus cuentas y realizar pedidos. Este sistema garantiza que los datos personales y los pedidos de los clientes se mantengan seguros. La implementación de autenticación sigue los siguientes pasos clave:

          • Registro de Usuarios: Los usuarios pueden registrarse proporcionando su información básica, como correo electrónico y contraseña. Las contraseñas se almacenan de forma segura mediante hashing y nunca se guardan en texto claro, protegiendo así la privacidad de los usuarios.
          • Inicio de Sesión Seguro: El proceso de inicio de sesión verifica las credenciales ingresadas por el usuario. Las contraseñas proporcionadas se comparan con los valores hash almacenados en la base de datos, permitiendo el acceso solo si coinciden.
          • Protección de Contraseñas: Las contraseñas se gestionan de manera segura en Amazon RDS utilizando técnicas de hashing y salting, lo que añade una capa de seguridad adicional y evita que se almacenen en texto plano.
          • Tokens de Autenticación: Al iniciar sesión, el sistema genera un token de autenticación que permite a los usuarios realizar acciones autorizadas sin tener que ingresar sus credenciales repetidamente. Este token tiene un tiempo de expiración para mayor seguridad.
          • Control de Sesiones y Expiración de Tokens: Para prevenir accesos no autorizados, los tokens de autenticación tienen un tiempo de expiración. Después de este período, el usuario debe autenticarse nuevamente, lo cual garantiza la protección continua de la cuenta.
          • Gestión de Errores y Mensajes de Seguridad: Para prevenir intentos de acceso indebidos, los mensajes de error en el proceso de autenticación son limitados. Esto minimiza el riesgo de ataques de fuerza bruta o de enumeración de usuarios.

          Gestión de Contenidos

          La gestión de contenidos es fundamental para mantener la plataforma actualizada y brindar una experiencia de usuario coherente y atractiva. En este proyecto, la administración de contenidos abarca la organización de productos, categorías y elementos visuales. Las funciones clave de la gestión de contenidos incluyen:

          • Administración de Productos: Los productos de la pizzería (pizzas, bebidas, postres, etc.) se gestionan en una base de datos, lo que permite que se puedan añadir, editar o eliminar fácilmente. Cada producto cuenta con detalles específicos, como nombre, descripción, precio y disponibilidad, que se reflejan automáticamente en la interfaz de usuario.
          • Organización por Categorías: Los productos se agrupan en categorías (por ejemplo, Pizzas, Bebidas, Postres) para facilitar la navegación y hacer que la experiencia de usuario sea más intuitiva. Esta estructura permite a los clientes encontrar fácilmente lo que buscan.
          • Actualización de Imágenes: Las imágenes de productos y banners promocionales están almacenadas en Amazon S3, lo que facilita su actualización sin afectar el rendimiento de la plataforma. Las nuevas imágenes se suben directamente al bucket de S3, asegurando que el contenido visual esté siempre actualizado y accesible.
          • Edición de Contenidos en Tiempo Real: Las modificaciones de precios, descripciones o disponibilidad se aplican en tiempo real. Esto permite que cualquier cambio hecho en la base de datos se refleje inmediatamente en la interfaz de usuario, manteniendo la información actualizada.
          • Sistema de Promociones y Ofertas Especiales: La plataforma permite añadir promociones y ofertas especiales para destacar ciertos productos o categorías. Estas ofertas se pueden activar o desactivar fácilmente en la base de datos, brindando flexibilidad para adaptar el contenido a las campañas de marketing.
          • Sincronización con el Backend: Todos los contenidos están sincronizados con el backend a través de AWS Lambda, lo que asegura que las actualizaciones en la base de datos se apliquen sin problemas en la aplicación. Esto permite una gestión eficaz y sin interrupciones del contenido, asegurando que los usuarios siempre tengan acceso a la información más reciente.